home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / cpp_libs / varia / silo.lha / silo / Entity.c < prev    next >
C/C++ Source or Header  |  1993-08-08  |  1KB  |  67 lines

  1. /* $Author: ecsv38 $ $Date: 90/08/21 14:45:49 $ $Revision: 1.1 $ */
  2. /* (c) S. Manoharan  sam@lfcs.edinburgh.ac.uk */
  3.  
  4. #include "Entity.h"
  5. #include "SimEventList.h"
  6. #include "Debug.h"
  7.  
  8. #include "Counter.h"
  9.  
  10. static Counter timer;
  11. SimEventList eventlist;
  12.  
  13. Event *cause()
  14. {
  15.    if ( debug_level(1) ) {
  16.       cout << "\n---Begin{eventlist}\n";
  17.       ::eventlist.print();
  18.       cout << "\n---End{eventlist}\n";
  19.    }
  20.  
  21.  
  22.    Event *ev = ::eventlist.get();
  23.    if ( ev == 0 ) return 0;
  24.  
  25.    if ( ev->eventTime() > ::timer() ) 
  26.       ::timer.set(ev->eventTime());
  27.  
  28.    return ev;
  29. }
  30.  
  31. short cancel(const int eid)
  32. {
  33.    Event *ev = ::eventlist.remove(eid);
  34.  
  35.    if ( ev == 0 ) return 0;
  36.    else {
  37.       delete ev;
  38.       return 1;
  39.    }
  40. }
  41.  
  42. double simtime()
  43. {
  44.    return timer();
  45. }
  46.  
  47. Entity::Entity(char *const s)
  48. {
  49.    static int eid = 0;
  50.  
  51.    entity_name = s, entity_id = eid++;
  52. }
  53.  
  54. void
  55. Entity::schedule(const double delay, Event *const ev)
  56. {
  57.    if ( delay < 0 ) {
  58.       cout << form("%s: invalid delay %g\n", entity_name, delay);
  59.       exit(-1);
  60.    }
  61.    ev->scheduled_by(this);
  62.    ev->eventTime(::timer() + delay);
  63.  
  64.    ::eventlist.append(ev);
  65. }
  66.  
  67.